<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.global.js"></script>
</head>

<body>
    <div id="app">
        <p v-color v-if="flag">{{msg}}</p>
        <button @click="flag=!flag">修改flag</button>

        <!--自动聚焦 -->
        <input type="text" name="" id="" v-focus>
        <!-- 指令的传参 -->
        <p v-red="'red'">自定义指令传参1</p>
        <p v-red="'green'">自定义指令传参2</p>
    </div>
</body>

</html>
<script>
    // 自定义指令
    // 作用: 主要用来操作原生的dom, 可以在用户的按钮权限控制中使用,设置该按钮是否显示隐藏 或者禁用
    // 分为2类 : 
    // 第一类: 全局自定义指令
    // 全局指令可以在全局的任意位置使用
    // 第二类: 局部自定义指令
    // 局部变量只能在当前定义该指令的组件中使用

    // 全局指令
    // 语法: app.directive(指令名,配置对象)
    // 注意: 指令中的this 执行window


    // 指令的参数
    const app = Vue.createApp({
        data() {
            return {
                msg: '自定义指令',
                flag: true
            }
        },
        methods: {

        },
        // 定义局部指令
        directives: {
            focus: {
                mounted(el, binding) {
                    el.focus()
                }
            },
            red: {
                mounted(el, binding) {
                    console.log(el, binding);
                    // binding 中包含参数
                    el.style.color = binding.value
                }
            }
        }
    })


    // 全局指令
    // 使用的时候 v-color
    app.directive('color', {
        mounted(el, binding, vnode, prevVnode) {
            // 挂载后的生命周期, 此时当前的绑定该指令的节点已经挂载到了父节点的dom 上
            //console.log('mounted', el, binding, vnode, prevVnode);
            // console.log(el.parentNode); 
            console.log('mounted');
            el.style.background = 'red'
            // console.log(binding.instance); 可以获取当前的组件实例
        },

    })

    app.mount('#app')

</script>